Android 中 Retrofit2.X 的使用(1)

前言

本文只是 Retrofit Android 端的常规使用


正文

一、Retrofit 简介

Retrofit 是 Square 公司开源的一个网络请求框架,适用于 Android 和 java ,采用注解的方式,简化网络请求,提高网络请求速度,底层为 Square 公司的 okhttp !

二、主要的请求方式和注解简介

1. 主要的请求方式
格式 含义
@GET 表示这是一个GET请求
@POST 表示这个一个POST请求
@PUT 表示这是一个PUT请求
@DELETE 表示这是一个DELETE请求
@HEAD 表示这是一个HEAD请求
@OPTIONS 表示这是一个OPTION请求
@PATCH 表示这是一个PAT请求
2. 主要的注解
格式 含义
@Headers 添加请求头
@Path 替换路径
@Query 替代参数值,通常是结合get请求的
@FormUrlEncoded 用表单数据提交
@Field 替换参数值,是结合post请求的

三、简单使用例子

1. 添加依赖和权限
1
2
3
//这两个依赖的版本要一致
compile 'com.squareup.retrofit2:retrofit:2.2.0'
compile 'com.squareup.retrofit2:converter-gson:2.2.0'
1
2
//添加网络请求权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
2. 创建网络请求接口
1
2
3
4
5
6
7
8
9
10
11
12
13
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;
import retrofit2.http.Query;
//接口名称,随意命名
public interface RetrofitText {
//@GET 表示是get请求 , 而 @GET 后边括号里的是相对
@GET("sapientialMall/getLadderInfo.action")
Call<RetrofitTextBean> getRequest(@Query("market_id") int markret_id ,
@Query("floor_start") int floor_start ,
@Query("floor_end") int floor_end );
}

说明:

  1. 这是一个接口,接口名称随意命名
  2. @GET 表示是 get 请求 , 而 @GET 后边括号里的是相对地址,例如:www.baidu.com/aaaa/bbbb/ccccc ,其中 aaaa/bbbb/ccccc 就是相对地址。
  3. Call 是固定写法,后边<>中的 RetrofitTextBean 是根据请求结果的 json 字符串生成的 javaBean
  4. getRequest 方法名一般采用 getXXX的形式
  5. @Query 是配合 GET 请求用的,后边的括号内为拼接在 url 后的请求参数 key ,而 int 类型的 markret_id 为 value
3. 开始异步请求 ( GET 请求)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//1.创建 Retrofit 实例,并完成相关配置
Retrofit retrofit = new Retrofit.Builder()
//baseUrl 为 www.baidu.com/aaaa/bbbb/ccccc 中的 www.baidu.com/
.baseUrl(baseUr)
//表示调用 Gson 库来解析返回值,将结果直接解析为 javaBean 对象
.addConverterFactory(GsonConverterFactory.create())
.build();
//2.创建接口对象,即 RetrofitText 接口的对象
RetrofitText retrofitText = retrofit.create(RetrofitText.class);
//3.获取请求服务方法
Call<RetrofitTextBean> call = retrofitText.getRequest(1, 5, -3);
//4.开始异步请求
call.enqueue(new Callback<RetrofitTextBean>() {
@Override
public void onResponse(Call<RetrofitTextBean> call, Response<RetrofitTextBean> response) {
//请求成功
}
@Override
public void onFailure(Call<RetrofitTextBean> call, Throwable t) {
//请求失败
}
});

四、GET 请求扩展(以第三条的例子为基础)

1. 另一种接口定义方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.http.Url;
public interface RetrofitText {
@GET("")
Call<RetrofitTextBean> getRequest2(@Url String url ,
@Query("market_id") int markret_id ,
@Query("floor_start") int floor_start ,
@Query("floor_end") int floor_end );}

说明: 这种定义方式,是在获取请求方法的时候才传入相对地址,更加灵活一点,如下所示:

1
Call<RetrofitTextBean> call = retrofitText.getRequest2("这里是相对地址", 1, 5, -3);

2. 还有一种接口定义方式

1
2
@GET("sapientialMall/getLadderInfo.action")
Call<RetrofitTextBean> getRequest4(@QueryMap Map<String , Integer > map);

说明: 这种适合参数比较多,且参数的数据类型一致时,使用

未完待续~